package com.jqq.reflection.class_;

import com.jqq.Car;

import java.lang.reflect.Field;

/**
 * @author 姬倩倩
 * @version 1.0
 */
public class Class01 {
    public static void main(String[] args) throws Exception {
        String classAllPath = "com.jqq.Car";
        //1.获取到Car类 对应的 Class对象
        //<?>表示不确定的Java类型
        Class<?> cls = Class.forName(classAllPath);
        //2.输出cls
        //显示cls对象是哪个类的Class对象
        System.out.println(cls);//class com.jqq.Car
        //输出cls运行类型
        System.out.println(cls.getClass());//class java.lang.Class
        //3.得到包名
        System.out.println(cls.getPackage().getName());//com.jqq
        //4.得到全类名
        System.out.println(cls.getName());//com.jqq.Car
        //5.通过cls创建对象实例
        //Object o = cls.getConstructor().newInstance();//jdk9
        Car car = (Car)cls.newInstance();
        System.out.println(car);//调用car.toString()
        //6.通过反射得到属性 brand
        Field brand = cls.getField("brand");//如果是私有属性会报错
        System.out.println(brand.get(car));//宝马
        //7.通过反射给属性赋值
        brand.set(car, "奔驰");
        System.out.println(brand.get(car));//奔驰
        //8.得到Car类的所有的属性的名称
        Field[] fields = cls.getFields();
        for (Field f :fields) {
            System.out.println(f.getName());
        }

    }
}
